package protocol

// import (
// 	"context"
// 	"fmt"
// 	"net/http"
// 	"time"

// 	"github.com/gin-gonic/gin"
// 	"github.com/infraboard/mcube/logger"
// 	"github.com/infraboard/mcube/logger/zap"

// 	"github.com/infraboard/keyauth/apps/endpoint"
// 	"github.com/infraboard/keyauth/version"
// 	"github.com/infraboard/mcube/app"
// 	"github.com/infraboard/mcube/http/middleware/cors"

// 	"gitee.com/go-course/mcube-demo/conf"
// )

// // NewHTTPService 构建函数
// func NewHTTPService() *HTTPService {
// 	c, err := conf.C().Keyauth.Client()
// 	if err != nil {
// 		panic(err)
// 	}

// 	r := gin.New()

// 	server := &http.Server{
// 		ReadHeaderTimeout: 60 * time.Second,
// 		ReadTimeout:       60 * time.Second,
// 		WriteTimeout:      60 * time.Second,
// 		IdleTimeout:       60 * time.Second,
// 		MaxHeaderBytes:    1 << 20, // 1M
// 		Addr:              conf.C().App.HTTP.Addr(),
// 		Handler:           cors.AllowAll().Handler(r),
// 	}
// 	return &HTTPService{
// 		r:        r,
// 		server:   server,
// 		l:        zap.L().Named("HTTP Service"),
// 		c:        conf.C(),
// 		endpoint: c.Endpoint(),
// 	}
// }

// // HTTPService http服务
// type HTTPService struct {
// 	r      gin.IRouter
// 	l      logger.Logger
// 	c      *conf.Config
// 	server *http.Server

// 	endpoint endpoint.ServiceClient
// }

// func (s *HTTPService) PathPrefix() string {
// 	return fmt.Sprintf("%s/api", s.c.App.Name)
// }

// // Start 启动服务
// func (s *HTTPService) Start() error {
// 	// 装置子服务路由
// 	app.LoadGinApp(s.PathPrefix(), s.r)

// 	// 注册路由条目
// 	s.RegistryEndpoint()

// 	// 启动 HTTP服务
// 	s.l.Infof("HTTP服务启动成功, 监听地址: %s", s.server.Addr)
// 	if err := s.server.ListenAndServe(); err != nil {
// 		if err == http.ErrServerClosed {
// 			s.l.Info("service is stopped")
// 		}
// 		return fmt.Errorf("start service error, %s", err.Error())
// 	}
// 	return nil
// }

// // Stop 停止server
// func (s *HTTPService) Stop() error {
// 	s.l.Info("start graceful shutdown")
// 	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
// 	defer cancel()
// 	// 优雅关闭HTTP服务
// 	if err := s.server.Shutdown(ctx); err != nil {
// 		s.l.Errorf("graceful shutdown timeout, force exit")
// 	}
// 	return nil
// }

// func (s *HTTPService) RegistryEndpoint() {
// 	// 注册服务权限条目
// 	s.l.Info("start registry endpoints ...")

// 	req := endpoint.NewRegistryRequest(version.Short(), nil)
// 	_, err := s.endpoint.RegistryEndpoint(context.Background(), req)
// 	if err != nil {
// 		s.l.Warnf("registry endpoints error, %s", err)
// 	} else {
// 		s.l.Debug("service endpoints registry success")
// 	}
// }

// func NewDemoCollector() *DemoCollector {
// 	return &DemoCollector{
// 		queueLengthDesc: prometheus.NewDesc(
// 			"magedu_mcube_demo_queue_length",
// 			"The number of items in the queue.",
// 			// 动态标签的key列表
// 			[]string{"instnace_id", "instnace_name"},
// 			// 静态标签
// 			prometheus.Labels{"module": "http-server"},
// 		),
// 		// 动态标签的值, 这里必须与声明的动态标签的key一一对应
// 		labelValues: []string{"mq_001", "kafka01"},
// 	}
// }

// type DemoCollector struct {
// 	queueLengthDesc *prometheus.Desc
// 	labelValues     []string
// }

// func (c *DemoCollector) Describe(ch chan<- *prometheus.Desc) {
// 	ch <- c.queueLengthDesc
// }

// func (c *DemoCollector) Collect(ch chan<- prometheus.Metric) {
// 	ch <- prometheus.MustNewConstMetric(c.queueLengthDesc, prometheus.GaugeValue, 100, c.labelValues...)
// }
